<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>设计模式——享元模式</title>
    <script type="application/javascript" charset="UTF-8" src="../../common/CommonUtils.js"></script>
    <script type="application/javascript" charset="UTF-8">
        // 享元模式 : 优化代码 (优化：时间方面[代码的运行时间] 空间方面[web浏览器的内存])
        // 两个概念 ： 1、内在数据[出厂商、型号、出厂日期]；2、外在数据[拥有者、车牌号、登记日期]
        // 可以看出 ： 内在数据有一个特点就是，后期不能改变的  外在数据在后期都是可以改变的
        // 利用享元模式，可以把静态的数据单独提出来，在实例化对象的时候，只实例化一次，然后与动态的部分进行结合
        // 比如说是，张三和李四都买的是 上海大众制造的迈腾系列的车。出厂日期都是同一天
        // 优化后的代码见 ： design_flyweight_02.html

        // 出厂商、型号、出厂日期、拥有者、车牌号、最近登记日期
        var Car = function (make, model, year, owner, tag, renewDate) {
            this.make = make;
            this.model = model;
            this.year = year;
            this.owner = owner;
            this.tag = tag;
            this.renewDate = renewDate;
        };
        Car.prototype = {
            constructor : Car,
            getMake : function () {
                return this.make;
            },
            getModel : function () {
                return this.model;
            },
            getYear : function () {
                return this.year;
            },
            renewDateRegistration : function (newRenewDate) {
                this.renewDate = newRenewDate;
            }
        };

        // 如果现在直接构造5百万辆车，大概用时 460ms,web内存消耗大概是:400
        var stime = new Date().getTime();
        var arr = [];
        for (var i = 0; i < 5000000; i++) {
            arr.push(new Car('上海大众','迈腾','2014-01-01','wl','甘A8888','2015-01-01'));
        }
        var etime = new Date().getTime();
        alert(etime - stime);
        // 所以可以用享元模式进行优化
    </script>
</head>
<body>

</body>
</html>